package cc.wsyw126.java.nowcoder.interview;

import java.util.HashSet;

/**
 * Created by Administrator on 2017/4/24.
 * 请编写一个算法，若N阶方阵中某个元素为0，则将其所在的行与列清零。
 * 给定一个N阶方阵int[][](C++中为vector>)mat和矩阵的阶数n，请返回完成操作后的int[][]方阵(C++中为vector>)，保证n小于等于300，矩阵中的元素为int范围内。
 */
public class Clearer {
    public int[][] clearZero(int[][] mat, int n) {
        HashSet<Integer> setX = new HashSet<>();
        HashSet<Integer> setY = new HashSet<>();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (mat[i][j] == 0) {
                    setX.add(i);
                    setY.add(j);
                }
            }
        }
        for (Integer integer : setX) {
            for (int i = 0; i < n; i++) {
                mat[integer][i] =0;
            }
        }
        for (Integer integer : setY) {
            for (int i = 0; i < n; i++) {
                mat[i][integer] =0;
            }
        }
        return mat;
    }

    public static void main(String[] args) {
        Clearer clearer = new Clearer();
        int[][] mat = new int[][]{{1,0,2},{3,4,1},{1,1,2}};
        int[][] ints = clearer.clearZero(mat, 3);
        for (int i = 0; i < ints.length; i++) {
            for (int j = 0; j < ints[0].length; j++) {
                System.out.print(ints[i][j] + "\t");
            }
            System.out.println();
        }
    }
}
